function [new_life1,new_life2] = new_cross(Smt,life_parent1,life_parent2)

    life_parent1.fc = decode(life_parent1.fe,life_parent1.fc);%获取喂料器元件分布序列（由于原始的fc经过遗传操作会有重复的序号，因此解码出实际序列）
    life_parent2.fc = decode(life_parent2.fe,life_parent2.fc);%喂料器元件分布序列
    child1_life = life_parent1;%子代初始化
    child2_life = life_parent2;
    r1 = randperm(length(life_parent1.fc),1);
    r2 = randperm(length(life_parent1.fc),1);
    fc1 = life_parent1.fc;
    fc2 = life_parent2.fc;
    MIN = min(r1,r2);
    MAX = max(r1,r2);
%       MIN = 3;
%       MAX = 5;
    %% 选择更优的父代取中间序列
    if life_parent1.fitness > life_parent2.fitness 
        middle_fc = fc1(MIN:MAX);
    else
        middle_fc = fc2(MIN:MAX);
    end
    %% 子代中间序列替换为更优的中间序列
    child1_life.fc(MIN:MAX) = middle_fc;
    child2_life.fc(MIN:MAX) = middle_fc;
    %% 交换子代中间序列后面部分的序列
    child1_life.fc(MAX+1:end) = life_parent2.fc(MAX+1:end);
    child2_life.fc(MAX+1:end) = life_parent1.fc(MAX+1:end);
    %% 统计所有的元件序号，重复序号只统计一次
    del1 = unique(child1_life.fc);
    del2 = unique(child2_life.fc);
    %% 查找并剔除掉相同的序列值(剔除最后一个)
    for i = 1:length(del1)
        del_seq = find(child1_life.fc == del1(i));%依次找到序号的位置
        len = length(del_seq);
        if len > 1 %序号重复则删掉一个
            for t = 1:len-1
                child1_life.fc(del_seq(end)) = [];%删掉最后一个重复的元件
            end
        end
    end
    for i = 1:length(del2)
        del_seq = find(child2_life.fc == del2(i));%找到重复序号的位置
        len = length(del_seq);
        if len > 1 %序号重复则删掉一个
            for t = 1:len-1
                child2_life.fc(del_seq(end)) = [];%删掉最后一个重复的元件
            end
        end
    end
    %% 因为删除了一些重复的序号，需要补上缺失的序号
    num = 1;
    insert1 = 0;
    for j = 1:length(fc1)
        ind = find(child1_life.fc == j);
        if isempty(ind) %如果没有该序号，则记录该序号
            insert1(num) = j;
            num = num +1;
        end
    end
    
    %% 其他遗传操作导致fc重复序号！！！！！！！！
    num = 1;
    insert2 = 0;
    for j = 1:length(fc1)
        ind = find(child2_life.fc == j);
        if isempty(ind) %如果没有该序号，则记录该序号
            insert2(num) = j;
            num = num +1;
        end
    end
    %% 比较缺失的序号插在第一位和最后一位的适应值
    %% 子代1不同插入的适应度比较
    if insert1 ~=0
        % 子代1缺失的序号插前面，并计算适应度
        front_child1 = child1_life;
        front_child1.fc = [insert1,child1_life.fc];
        [front_child1.fitness,front_child1.dis_sum]= Count_Fit(Smt,front_child1);
        % 子代1缺失的插后面
        behind_child1 = child1_life;
        behind_child1.fc = [child1_life.fc,insert1];
        [behind_child1.fitness,behind_child1.dis_sum]= Count_Fit(Smt,behind_child1);
        % 适应度高的作为最终的子代1
        if behind_child1.fitness > front_child1.fitness
            child1_life = behind_child1;
        else
            child1_life = front_child1;
        end
    end

        %% 子代2不同插入的适应度比较
    if insert2~=0
        % 子代2缺失的序号插前面，并计算适应度
        front_child2 = child2_life;
        front_child2.fc = [insert2,child2_life.fc];
        [front_child2.fitness,front_child2.dis_sum]= Count_Fit(Smt,front_child2);
        % 子代2缺失的插后面
        behind_child2 = child2_life;
        behind_child2.fc = [child2_life.fc,insert2];
        [behind_child2.fitness,behind_child2.dis_sum]= Count_Fit(Smt,behind_child2);
        % 适应度高的作为最终的子代2
        if behind_child2.fitness > front_child2.fitness
            child2_life = behind_child2;
        else
            child2_life = front_child2;
        end
    end
    %% 比较最终的两个子代适应度大小，选出适应度最高的作为返回
    new_life1 = child2_life;
    new_life2 = child1_life;
    
end
